--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / backend / lifecycle / deferred_network.py
Displaying Raw • Download
meshchatx/src/backend/lifecycle/deferred_network.py v4.8.1 (f6cc7b83) Text, 3.57 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Deferred network startup helpers.
Thin wrappers live on ReticulumMeshChat. Business steps stay here so
identity and RNS lifecycle stay reviewable outside meshchat.py.
"""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787traceback
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787async_utils Tff7b72import Te6edf3AsyncUtils
Tff7b72def Td2a8ffrun_network_setupTb4b4b4(Te6edf3appTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Run identity setup and publish network_ready or degraded status."""
Te6edf3identity Tff7b72= Te6edf3appTff7b72.Td2a8ff_pending_identity
Tff7b72if Te6edf3identity Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3appTff7b72.Td2a8ff_set_startup_stageTb4b4b4(Ta5d6ff"Ta5d6fffailedTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffNo identity available for network setupTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72tryTb4b4b4:
Te6edf3appTff7b72.Td2a8ffsetup_identityTb4b4b4(Te6edf3identityTb4b4b4)
Tff7b72if Te6edf3appTff7b72.Td2a8ffconfig Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tffa657getattrTb4b4b4(Te6edf3appTb4b4b4, Ta5d6ff"Ta5d6ffsession_secret_keyTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3appTff7b72.Td2a8ffconfigTff7b72.Td2a8ffauth_session_secretTff7b72.Td2a8ffsetTb4b4b4(Te6edf3appTff7b72.Td2a8ffsession_secret_keyTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffFailed to persist session secret into config: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3appTff7b72.Td2a8ff_mark_network_readyTb4b4b4(Tb4b4b4)
Te6edf3finish_deferred_startup_servicesTb4b4b4(Te6edf3appTb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffNetwork stack readyTa5d6ff"Tb4b4b4, Te6edf3flushTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3appTff7b72.Td2a8ffwebsocket_clientsTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3AsyncUtilsTff7b72.Td2a8ffrun_asyncTb4b4b4(
Te6edf3appTff7b72.Td2a8ffwebsocket_broadcastTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffstartup_statusTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffstageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffreadyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnetwork_readyTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Te6edf3tracebackTff7b72.Td2a8ffprint_excTb4b4b4(Tb4b4b4)
Te6edf3appTff7b72.Td2a8ff_mark_network_degradedTb4b4b4(Tffa657strTb4b4b4(Te6edf3excTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3appTff7b72.Td2a8ffwebsocket_clientsTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3AsyncUtilsTff7b72.Td2a8ffrun_asyncTb4b4b4(
Te6edf3appTff7b72.Td2a8ffwebsocket_broadcastTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffstartup_statusTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fffailedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffstageTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fffailedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnetwork_readyTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffnetwork_degradedTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6ffui_readyTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3excTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8fffinish_deferred_startup_servicesTb4b4b4(Te6edf3appTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Start non-critical services after network_ready is published."""
Te6edf3context Tff7b72= Te6edf3appTff7b72.Td2a8ffcurrent_context
Tff7b72if Te6edf3context Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3contextTff7b72.Td2a8ffsetup_deferred_servicesTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffDeferred identity services failed: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4, Te6edf3flushTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3start_deferred_reticulum_servicesTb4b4b4(Te6edf3appTb4b4b4)
Tff7b72def Td2a8ffstart_deferred_reticulum_servicesTb4b4b4(Te6edf3appTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3appTff7b72.Td2a8ff_reticulum_secondary_startedTb4b4b4:
Tff7b72return
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3appTb4b4b4, Ta5d6ff"Ta5d6ffreticulumTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3appTff7b72.Td2a8ff_reticulum_secondary_started Tff7b72= Tff7b72True
Tff7b72tryTb4b4b4:
Te6edf3appTff7b72.Td2a8ffpage_node_managerTff7b72.Td2a8ffstart_allTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3node Tff7b72in Te6edf3appTff7b72.Td2a8ffpage_node_managerTff7b72.Td2a8ffnodesTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3nodeTff7b72.Td2a8ffrunning Tff7b72and Te6edf3nodeTff7b72.Td2a8ffdestinationTb4b4b4:
Te6edf3appTff7b72.Td2a8ff_register_local_page_node_announceTb4b4b4(Te6edf3nodeTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffDeferred page node start failed: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4, Te6edf3flushTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3appTff7b72.Td2a8ffplugins_enabledTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3appTff7b72.Td2a8ffplugin_managerTff7b72.Td2a8ffinstall_bundled_examplesTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffBundled plugin sync failed: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4, Te6edf3flushTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3appTff7b72.Td2a8ffsideband_plugin_loaderTff7b72.Td2a8ffreloadTb4b4b4(Tb4b4b4)
Te6edf3appTff7b72.Td2a8ff_ensure_sideband_telemetry_loopTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSideband plugin loader init failed: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────